package br.com.sisgerenciamento.pedido;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;

import br.com.sisgerenciamento.dto.cliente.ClienteDTO;
import br.com.sisgerenciamento.dto.endereco.EnderecoDTO;
import br.com.sisgerenciamento.dto.pedido.PedidoDTO;
import br.com.sisgerenciamento.dto.produto.ProdutoDTO;
import br.com.sisgerenciamento.dto.produtoquantidade.ProdutoQuantidadeDTO;
import br.com.sisgerenciamento.dto.recebimento.RecebimentoDTO;
import br.com.sisgerenciamento.model.endereco.TipoEnderecoEnum;
import br.com.sisgerenciamento.model.pedido.TipoEntregaEnum;
import br.com.sisgerenciamento.model.recebimento.FormaPagamentoEnum;
import br.com.sisgerenciamento.util.UtilActionForm;
import br.com.sisgerenciamento.utilidades.EstadosBrasilEnum;
import br.com.sisgerenciamento.utilidades.TreatDate;


public class PedidoForm extends UtilActionForm{

	private static final long serialVersionUID = 5220679519340671040L;
	
	private PedidoDTO pedido = new PedidoDTO();
	
	private byte pdf[];
	
	/* Cadastro Pedido*/
	private ArrayList<ClienteDTO> clientes = new ArrayList<ClienteDTO>();
	private ArrayList<ProdutoDTO> produtos = new ArrayList<ProdutoDTO>();
	private ArrayList<EstadosBrasilEnum> estados = EstadosBrasilEnum.listar();
	private ArrayList<TipoEnderecoEnum> tipoEndereco = TipoEnderecoEnum.listar();
	private EnderecoDTO endereco =  new EnderecoDTO();
	private ProdutoQuantidadeDTO produtoQuantidade = new ProdutoQuantidadeDTO();
	
	private Long codigPedido;
	private String nomeCliente;
	private List<PedidoDTO> listaPedido =  new ArrayList<PedidoDTO>();
	
	private Long codProduto;
	
	private Integer indexProdutoQuantidade;
	private Integer codigoProdutoQuantidade;
	
	private boolean gerarRelatorio;

	/* SETS */
	private Long codCliente;
	private Long codEndereco;
	private String descricaoLocacao;
	private boolean locacao = false;
	private Long codigoLocacao;
	private ArrayList<ProdutoQuantidadeDTO> produtosQuantidade =  new ArrayList<ProdutoQuantidadeDTO>();
	private Set<ProdutoQuantidadeDTO> produtosQuantidadeExcluir =  new HashSet<ProdutoQuantidadeDTO>();
	
	
	private ArrayList<RecebimentoDTO> recebimentos =  new ArrayList<RecebimentoDTO>();
	
	private boolean calcao = false;
	private ArrayList<FormaPagamentoEnum> formaPagamento = FormaPagamentoEnum.listar();
	private Integer idFormaPagamento;
	private String valorPago;
	private String dataPagamento;
	
	public void limparForm(){
		clientes =  new ArrayList<ClienteDTO>();
		codCliente = null;
		codEndereco = null;
		pedido = new PedidoDTO();
		pedido.setDataHoraEmissao(TreatDate.format("dd/MM/yyyy HH:mm", new Date()));
		pedido.setEntrega(TipoEntregaEnum.ENTREGAR.getValor());
		produtosQuantidade =  new ArrayList<ProdutoQuantidadeDTO>();
		listaPedido = new ArrayList<PedidoDTO>();
		descricaoLocacao = "";
		locacao = false;
		codigoLocacao = null;
		idFormaPagamento = null;
		valorPago = null;
		calcao = false;
		gerarRelatorio = false;
		pdf = null;
		recebimentos =  new ArrayList<RecebimentoDTO>();
	}
	
	public ArrayList<ClienteDTO> getClientes() {
		return clientes;
	}
	public void setClientes(ArrayList<ClienteDTO> clientes) {
		this.clientes = clientes;
	}
	public Long getCodCliente() {
		return codCliente;
	}
	public void setCodCliente(Long codCliente) {
		this.codCliente = codCliente;
	}

	public ArrayList<EstadosBrasilEnum> getEstados() {
		return estados;
	}
	public void setEstados(ArrayList<EstadosBrasilEnum> estados) {
		this.estados = estados;
	}
	public ArrayList<TipoEnderecoEnum> getTipoEndereco() {
		return tipoEndereco;
	}
	public void setTipoEndereco(ArrayList<TipoEnderecoEnum> tipoEndereco) {
		this.tipoEndereco = tipoEndereco;
	}
	public Long getCodEndereco() {
		return codEndereco;
	}
	public void setCodEndereco(Long codEndereco) {
		this.codEndereco = codEndereco;
	}
	public EnderecoDTO getEndereco() {
		return endereco;
	}
	public void setEndereco(EnderecoDTO endereco) {
		this.endereco = endereco;
	}
	public PedidoDTO getPedido() {
		return pedido;
	}
	public void setPedido(PedidoDTO pedidoDTO) {
		this.pedido = pedidoDTO;
	}
	public ArrayList<ProdutoDTO> getProdutos() {
		return produtos;
	}
	public void setProdutos(ArrayList<ProdutoDTO> produtos) {
		this.produtos = produtos;
	}
	public Long getCodProduto() {
		return codProduto;
	}

	public void setCodProduto(Long codProduto) {
		this.codProduto = codProduto;
	}
	public ArrayList<ProdutoQuantidadeDTO> getProdutosQuantidade() {
		return produtosQuantidade;
	}
	public void setProdutosQuantidade(
			ArrayList<ProdutoQuantidadeDTO> produtosQuantidade) {
		this.produtosQuantidade = produtosQuantidade;
	}
	public ProdutoQuantidadeDTO getProdutoQuantidade() {
		return produtoQuantidade;
	}
	public void setProdutoQuantidade(ProdutoQuantidadeDTO produtoQuantidade) {
		this.produtoQuantidade = produtoQuantidade;
	}
	public String getDescricaoLocacao() {
		return descricaoLocacao;
	}
	public void setDescricaoLocacao(String descricaoLocacao) {
		this.descricaoLocacao = descricaoLocacao;
	}
	public Integer getIndexProdutoQuantidade() {
		return indexProdutoQuantidade;
	}
	public void setIndexProdutoQuantidade(Integer indexProdutoQuantidade) {
		this.indexProdutoQuantidade = indexProdutoQuantidade;
	}
	public Integer getCodigoProdutoQuantidade() {
		return codigoProdutoQuantidade;
	}
	public void setCodigoProdutoQuantidade(Integer codigoProdutoQuantidade) {
		this.codigoProdutoQuantidade = codigoProdutoQuantidade;
	}
	public boolean isLocacao() {
		return locacao;
	}
	public void setLocacao(boolean locacao) {
		this.locacao = locacao;
	}
	public Long getCodigoLocacao() {
		return codigoLocacao;
	}
	public void setCodigoLocacao(Long codigoLocacao) {
		this.codigoLocacao = codigoLocacao;
	}
	public Set<ProdutoQuantidadeDTO> getProdutosQuantidadeExcluir() {
		return produtosQuantidadeExcluir;
	}
	public void setProdutosQuantidadeExcluir(
			Set<ProdutoQuantidadeDTO> produtosQuantidadeExcluir) {
		this.produtosQuantidadeExcluir = produtosQuantidadeExcluir;
	}
	public List<PedidoDTO> getListaPedido() {
		return listaPedido;
	}
	public void setListaPedido(List<PedidoDTO> listaPedido) {
		this.listaPedido = listaPedido;
	}
	public String getNomeCliente() {
		return nomeCliente;
	}
	public void setNomeCliente(String nomeCliente) {
		this.nomeCliente = nomeCliente;
	}
	public Long getCodigPedido() {
		return codigPedido;
	}
	public void setCodigPedido(Long codigPedido) {
		this.codigPedido = codigPedido;
	}
	public ArrayList<FormaPagamentoEnum> getFormaPagamento() {
		return formaPagamento;
	}
	public void setFormaPagamento(ArrayList<FormaPagamentoEnum> formaPagamento) {
		this.formaPagamento = formaPagamento;
	}
	public Integer getIdFormaPagamento() {
		return idFormaPagamento;
	}
	public void setIdFormaPagamento(Integer idFormaPagamento) {
		this.idFormaPagamento = idFormaPagamento;
	}
	public String getValorPago() {
		return valorPago;
	}
	public void setValorPago(String valorPago) {
		this.valorPago = valorPago;
	}
	public boolean isCalcao() {
		return calcao;
	}

	public void setCalcao(boolean calcao) {
		this.calcao = calcao;
	}
	
	public boolean isGerarRelatorio() {
		return gerarRelatorio;
	}

	public void setGerarRelatorio(boolean gerarRelatorio) {
		this.gerarRelatorio = gerarRelatorio;
	}
	
	

	public byte[] getPdf() {
		return pdf;
	}

	public void setPdf(byte[] pdf) {
		this.pdf = pdf;
	}

	@Override
	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
		limparMensagem(request);
		return super.validate(mapping, request);
	}

	public String getDataPagamento() {
		return dataPagamento;
	}

	public void setDataPagamento(String dataPagamento) {
		this.dataPagamento = dataPagamento;
	}

	public ArrayList<RecebimentoDTO> getRecebimentos() {
		return recebimentos;
	}

	public void setRecebimentos(ArrayList<RecebimentoDTO> recebimentos) {
		this.recebimentos = recebimentos;
	}
	
	
}
